<?php

class Validator{
	
	function validateEmail($email) {
		
  		$regexp="/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i";
		  if ( !preg_match($regexp, $email) ) {
		       echo "Felaktig email-adress";
		       return false;
		  }
  			return true;
		}
	
	
	function validateIdNumber($number){
		$regexp="/^([12]{1}[90]{1}){0,1}[0-9]{6}[-]{0,1}[0-9]{4}$/i"; //kollar så att personnumret stämmer "formatmässigt"
		if(!preg_match($regexp, $number )){
			return false; //returnerar false från funktionen ifall formatet är fel
		}else{

			$number = str_replace('-', '', $number); //tar bort möjliga bindesstreck i personnumret.
			if(strlen(strval($number)) == 12){ //är det 12 siffror i numret....
				$number = substr($number, 2, 12); //.. så tar vi bort de två första siffrorna från årtalet.
			}
			$sum=0;
			 for($i =0; $i<strlen($number)-1; $i++){ // en forloop som går igenom varje siffra i numret. strlen returnerar längden på strängen.
			 	$tempnr; //temporär variabel för att spara undan nummer
			 	if($i % 2 == 0){ //varannan siffra ska multipliceras med 2 och varannan med 1
			 		$tempnr= $number[$i] * 2;
				}
				
				$tempnrsum=0; //temporär variabel för att spara summan av numrena som vi multiplicerar
				 for($x =0; $x<strlen(strval($tempnr)); $x++){ //separerar den multiplicerade summan så att vi kan addera dem med varandra
				 	$supertemp = strval($tempnr);
					 $tempnrsum+= $supertemp[$x];;
				 }
				 
				 $sum += $tempnrsum; //summerar
			 }
			 $sum = strval($sum); //gör om variabeln till en sträng så att vi kan använda strängfunktioner
			 $grej=0;
			 if(!$sum%10 == 0){ //om summan inte är jämnt delbart med 10 så...
				$grej = ((string)$sum[0] + 1) * 10; //... så räknar vi ut det övre 10talet.
			}
			$grej = $grej - $sum; //grej = summan som ska stämma överens med sista talet i personnumret!!!!!
			
			
			if(strval($grej) != substr($number, strlen($number)-1)){ //om grej inte stämmer överens med sista siffran returnerar funktionen false..
				return false; 
			}
			 
			return true; //GREAT SUCCESS!
		}
	}
	function validateDate($date){
		$regex1 = "/^([12]{1}[0-9]{3}){1}-(([0][1-9])|([1][0-2])){1}-(([0][1-9])|([12][0-9])|([3][0-2])){1}$/i"; //regex för formatet 1990-04-21
		$regex2 = "/^([0-9]{2}){1}-(([0][1-9])|([1][0-2])){1}-(([0][1-9])|([12][0-9])|([3][0-2])){1}$/i"; //regex för formatet 90-04-21
		$regex3 = "/^([0-9]{2}){1}(([0][1-9])|([1][0-2])){1}(([0][1-9])|([12][0-9])|([3][0-2])){1}$/i"; //regex för formatet 900421
		
		$month;
		$day;
		
		if(preg_match($regex1, $date )){ //matchar datumet i format nummer 1 så.......
			$month = substr($date, 5,2); //hämtar vi månaden på positionen 5-7.
			$day = substr($date, 8,2); //hämtar dag på position 8-10
		}else if(preg_match($regex2, $date )){ //samma för format 2
			$month = substr($date, 3,2);
			$day = substr($date, 6,2);
		}else if(preg_match($regex3, $date )){ //samma för format 3
			$month = substr($date, 2,2);
			$day = substr($date, 4,2);
		}else{	//om datumet inte stämmer överens med något av formaten returnerar funktionen false
			return false;
		}
		
		switch($month){ 
			case '01' || '03' || '05' || '07' || '08' || '10' || '12': //om 
				if ($day > 31) return false; break;
			case '02':
				if ($day > 28) return false; break;
			default:
				if ($day > 30) return false; break;
		}
	
		return true;
	}
	 
	function validateNumber($number){
		return is_numeric($number);
	}
	function validatePassword($password){
		$regex = "/^[a-zA-Z0-9_-]{6,12}$/";
		if(!preg_match($regex, $password )){
			return false;
		}
		return true;
	}
	function validateNoHTMLJS($code){
		$regex = "/(<[a-zA-Z]{1,}>)/";
		//$regex = "/(\/?[<=>|>&%:;.\/,{}']*)\/?)/";
		if(!preg_match($regex, $code)){
			return false;
		}
		return true; 
	}
	function validateHTMLButNoJS($code){
		$regex = "/<script>.<\/script>/";
		//$regex = "/(\/?[<=>|>&%:;.\/,{}']*)\/?)/";
		if(preg_match($regex, $code)){
			return false;
		}
		return true; 
	}
	
}
